Node基础 && node模块及内置方法 (7-1)

node

JS可以在浏览器中运行,也可以在Node中运行
JS是客户端语言,也是服务器端的语言


node基础

Node是什么?

node是供js代码执行的环境。等价于浏览器,只不过一般把node安装到服务器端(为了服务端可以使用js)

NODE && 浏览器

  • [x] 兼容
    • [ ] node采用谷歌引擎用来解析渲染JS代码(不存在兼容问题
    • [ ] 浏览器引擎不同,存在兼容问题
  • [x] 全局js对象:
    • [ ] node环境下的全局js对象是Global
    • [ ] 浏览器中全局js对象是window
  • [x] 进行文件操作 :
    • [ ] NODE环境提供对应I/O操作(服务器上文件的增删改查操作)
    • [ ] 浏览器安装在客户端,为了保护客户端安全,不提供js对客户电脑的文件进行操作的功能
  • [x] node提供给js很多新的方法
    (http.createServer、fs.writeFileSync、)
  • [x] node基于事件驱动/异步操作的

如何让js在node中执行

  • [x] 在命令窗口执行 ( 相当于js代码在node环境中执行 )
    • [ ] 找到文件目录,shift+右键—> 打开命令窗口,输入node **.js
    • [ ] 在命令窗口中执行 node,相当于浏览器控制台用来测试js代码
  • [x] webStorm嵌入node,直接右键(存在缓存问题)

服务创建成功,客户如何给服务端发送请求?

  • [ ] 浏览器中输入 http://localhost:端口号
  • [ ] 浏览器中输入 http://本机IP:端口号(联网)
    • 查看本机IP: ipconfig

node模块

(模块:提供方法,供js在node环境中使用)

  • [x] 内置模块:(node天生提供的)

    • [ ] http(创建和操作服务的)–>createServer
    • [ ] fs(文件I/O操作)–>writeFileSync
    • [ ] url(解析客户端的请求)
    • [ ] ……
  • [x] 自定义模块:自己写的js模块
    在NODE环境中,创建一个JS都相当于创建了一个模块–>例如:新建a.js,b.js(互不影响)

    • b调用a的方法
    • [ ] a模块方法被调用,需要通过module.exports方法导出
    • [ ] b模块使用a模块方法,需要导入a模块var a=require("./a");

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      //a模块
      function fn(){
      console.log("a")
      }
      module.exports={
      aaafn:fn
      }
      //b模块
      function fn(){
      console.log("b")
      }
      var a=require("./a");//导入a模块
      a.aaafn();//需要a导出到这里
  • [x] 第三方模块:别人写的模块我们来使用
    需要使用npm这个命令进行管理。npm属于NODE管理第三方模块的操作命令
    https://www.npmjs.com/

  • 模块安装:npm install,我们的每一个项目都可以使用这个模块了

  • 模块卸载: npm uninstall

    • 例如 : 安装导入less模块(存在问题)

      • 命令窗口执行npm install less(执行在当前文件下会出现一个node_modules文件夹)
      • 创建一个1.less文件

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        @color:#fff;
        .transition(@property:all,@duration:1s,@fn:linear,@delay:0s){
        -webkit-transition:@arguments;
        -moz-transition:@arguments;
        }
        .box{
        background:@color;
        .transiton(@duration:0.5s);
        }
        .box1{
        background:@color;
        .transiton(@duration:0.2s);
        }
      • 导入less模块:var less = require("less");使用less.render…等方法

        1
        2
        3
        4
        5
        var less = require("less");
        var fs = require("fs");
        less.render(fs.readFileSync("./1.less", "utf-8"), { compress:true }, function(error, output) {
        fs.writeFileSync("./1.css", output.css, "utf-8");//有错
        });

node模块内置方法

  • [x] 三个常用node内置模块

    1
    2
    3
    var http = require("http"),
    url = require("url"),//-->url.parse()用来解析url地址的
    fs = require("fs");
  • [ ] HTTP

    • http.createServer();–>创建一个服务(服务员)
    • server1.listen(80);–>为服务监听一个端口80(胸牌号)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      var http = require("http"), //->创建服务或者管理服务
      //当客户端向当前服务(80)发送请求才会执行的,服务成功接收这个请求)
      var server1 = http.createServer(function(request, response) {
      console.log("haha");
      // request(请求):存放所有客户的请求信息,包含客户端通过问好传参的方式传给服务器的数据内容
      // response(响应):提供了向客户端返回内容和数据的方法
      });
      //当端口监听成功后会触发回调函数执行
      server1.listen(80, function() {
      console.log("server is success,listening on 80 port!");
      });
  • [ ] url

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var url = require("url"); //-->url.parse()用来解析url地址的
var str = "http://localhost/index.html?name=11&age=7";
console.log(url.parse(str, true));//带true解析出的query是对象格式
//Url {……
// query: { name: '11', age: '7' },
// ……
//}
console.log(url.parse(str));
// Url {
// ……
// query: 'name=11&age=7',
// ……
//}
  • [ ] fs
    • 不管是读取还是写入,内容都是一个字符串。
1
2
3
var fs = require("fs");
var redfs = fs.readFileSync("./1.html", "utf-8");
// fs.readFileSync([pathname],[encode]):同步读取指定文件中内容(文件内容都读取出才执行下面操作)
  • 三个模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var http = require("http"),
url = require("url"),
fs = require("fs");
var server1 = http.createServer(function(request, response) {
// 客户请求:http://localhost/index.html?name=11&age=7
// reques.url:/index.html?name=11&age=7
var urlobj = url.parse(request.url, true),
pathname = urlobj.pathname;
// fs.readFileSync([pathname],[encode]):同步读取指定文件中内容(文件内容都读取出才执行下面操作)
try {
var redfs = fs.readFileSync("." + pathname, "utf-8");
response.end(redfs);//-->向客户端返回内容(html的源码)
} catch (e) {
response.end("request file is not find");
}
});
server1.listen(80, function() {
console.log("server is success,listening on 80 port!");
});